<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // 解构赋值是一种js的表达式 他可以按照一定的规则从数组或者对象中取出数据赋值给其他变量
    // 解构赋值要求等号两边的数据结构保持一致

    // 数组的解构赋值
    // 数组的解构赋值是按照索引值（下标）一一对应的
    var arr = [1, 2, 3, 4, undefined]
    // let [a, b, c, d] = arr
    // console.log(a, b, c, d)
    // let [a,,c] = arr
    // console.log(a, c)
    // 这是给解构的变量默认值的方法 默认值只有在赋值undefined的时候才会生效
    // var [a, b, c, d, e = 5] = arr
    // console.log(e)
    // var arr = [1, [2, 3, [4, 5]]]
    // let [,[,,[,a]]] = arr
    // console.log(a)
    // var arr = [1, 2, 3, 4]
    // ...表示扩展运算符 他用在变量上表示剩余数据 所以他只能放在最后一个使用
    // let [a, ...b] = arr
    // console.log(a, b)
    // let [...a, b] = arr
    // 对象的解构赋值
    // 对象的解构赋值是按照key对应的
    let obj = {
      name: 'zhangsan',
      age: 18,
      tel: 110,
      // sex: '女',
      // info: {
      //   accound: 'admin',
      //   password: 123456
      // }
    }

    // let { tel} = obj
    // console.log(tel)
    // console.log(sex)
    // let { name, sex = "男" } = obj
    // console.log(sex)
    // let {info:{accound}} = obj
    // console.log(accound)
    // let {name, ...obj2} = obj
    // console.log(obj2)

    // 字符串的解构赋值 他可以按照数组的模式进行解构赋值
    // let str = '德玛西亚'
    // console.log(str.length)
    // let [a,b, ...c] = str
    // console.log(a)
    // console.log(b)
    // console.log(c.join(''))
    // 数字解构赋值
    // let num = 123
    // 布尔值解构赋值
    // let bool = true
    // 函数参数的解构赋值
    // let {} = obj
    // let [] = arr
    function fn([a, b, c]) {
      // console.log(data)
      console.log(a, b, c)
      // console.log(sex)
    }

    fn(arr)
  </script>
</body>
</html>